// Copyright (c) 2008, 2009, Hiroshi Tsujimura
// Some rights reserved.
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// 
//  * Redistributions of source code must retain the above copyright notice,
//    this list of conditions and the following disclaimer.
//  * Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//  * Neither the name of Oki Software Co., Ltd. nor the names of its
//    contributors may be used to endorse or promote products derived from
//    this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE. 

using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Net;

[assembly: Tumblen3.Revision("$Header: /Tumblen3.root/Tumblen3/Tumblen3/InternetCookie.cs 1     09/04/17 16:30 Tsujimura543 $")]
namespace Tumblen3
{
    #region InternetCookie class
    public class InternetCookie
    {
        const int MaxCookieSize = 4096;

        /// <summary>
        /// Get cookies specified by URL
        /// </summary>
        /// <param name="url">URL</param>
        /// <returns></returns>
        public static string GetCookie(string url)
        {
            StringBuilder cookieData =
                new StringBuilder(new string(' ', MaxCookieSize), MaxCookieSize);
            UInt32 size = (UInt32)cookieData.Length;

            InternetGetCookie(url, null, cookieData, ref size);

            return cookieData.ToString();
        }

        /// <summary>
        /// Set cookies specified by URL
        /// </summary>
        /// <param name="url">URL</param>
        /// <param name="c">cookies tied by URL</param>
        public static void SetCookie(string url, CookieCollection c)
        {
            int cnt = c.Count;

            for (int i = 0; i < cnt; i++)
                InternetSetCookie(url, c[i].Name, c[i].Value);
        }

        [DllImport("wininet.dll")]
        private static extern bool InternetGetCookie(
            string lpszUrl, string lpszCookieName,
            StringBuilder lpCookieData, ref UInt32 lpdwSize);

        [DllImport("wininet.dll")]
        private static extern bool InternetSetCookie(
            string lpszUrl, string lpszCookieName, string lpszCookieData);
    }
    #endregion
}
